home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / OBERON / POTSRC / lib / mod / strings next >
Text File  |  1995-01-22  |  1KB  |  48 lines

  1. MODULE Strings;
  2.  
  3.   PROCEDURE Length*(s: ARRAY OF CHAR): LONGINT;
  4.     VAR l: LONGINT;
  5.   BEGIN l := 0; WHILE s[l] # 0X DO INC(l) END; RETURN l
  6.   END Length;
  7.  
  8.   PROCEDURE Append*(VAR s: ARRAY OF CHAR; tail: ARRAY OF CHAR);
  9.     VAR i, j: LONGINT;
  10.   BEGIN
  11.     i := 0; WHILE s[i] # 0X DO INC(i) END; j := i;
  12.     LOOP
  13.       s[i] := tail[i - j];
  14.       IF s[i] = 0X THEN EXIT END;
  15.       INC(i)
  16.     END
  17.   END Append;
  18.  
  19.  (* we suppose Base to be either extent of 2 or 10 *)
  20.   PROCEDURE FromLInt*(li: LONGINT; Base: SHORTINT; VAR s: ARRAY OF CHAR);
  21.     VAR i: INTEGER;
  22.       
  23.     PROCEDURE Tail(li: LONGINT);  
  24.       
  25.     BEGIN  
  26.       IF li >= Base THEN Tail(li DIV Base); li := li MOD Base END;  
  27.       IF li < 10 THEN s[i] := CHR(li + ORD("0"))  
  28.       ELSE s[i] := CHR(li - 10 + ORD("A"))  
  29.       END;  
  30.       INC(i)  
  31.     END Tail;  
  32.  
  33.   BEGIN
  34.     i := 0;
  35.     IF li < 0 THEN 
  36.       IF Base = 10 THEN (* only for base ten *)
  37.         s[0] := "-"; li := -li; i := 1
  38.       ELSE (* two's complement arithmetics (should import SYSTEM) *)
  39.         Tail(MAX(LONGINT) DIV (Base DIV 2) + (li + Base) DIV Base); 
  40.         li := li MOD Base
  41.       END
  42.     END;    
  43.     Tail(li);
  44.     s[i] := 0X
  45.   END FromLInt;
  46.  
  47. END Strings.
  48.